package srcTest;


import static org.junit.Assert.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.embeddable.EJBContainer;
import javax.naming.NamingException;

import junit.framework.Assert;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import com.sumset.daos.CiudadDao;
import com.sumset.entidades.Ciudad;

/**clase que permite probar los meetodos de la clase ciudadDao
 * @author leyson FCP
 *
 */
public class CiudadTest {

	private static EJBContainer contenedor;
	private static CiudadDao cd;
	
	/**metodo que se ejecuta de primero para crear una
	 * ciudad y poder probar los metodos del ciudadDao
	 * @throws NamingException
	 */
	@BeforeClass
	public static void primer() throws NamingException {
		
		Map<String, String> properties=new HashMap<String, String>();
		properties.put(EJBContainer.APP_NAME, "pratica_26");
		contenedor=EJBContainer.createEJBContainer(properties);
		cd=(CiudadDao) contenedor.getContext().lookup("java:global/pratica_26/CiudadDao");
		
		
		Ciudad c=new Ciudad();
		c.setId(1);
		c.setNombre("prueba");
		
		cd.insert(c);
		
	}
	
	
	
	/**
	 * metodo que prueba el insertar de la clase ciudadDao
	 */
	@Test
	public void testInsert() {
    Ciudad c=new Ciudad();
	c.setId(2);
	c.setNombre("prueba2");
	
	cd.insert(c);
	}
	/**
	 * metodo que prueba el actualizar de la clase ciudadDao
	 * @throws Exception 
	 */
	@Test
	public void testUpdate() throws Exception {
		Ciudad c=cd.buscar(1);
		c.setNombre("x");
		cd.update(c);
		
		c=cd.buscar(1);
		
		Assert.assertEquals("x", c.getNombre());
	}
	/**
	 * metodo que prueba el eliminar de la clase ciudadDao
	 * @throws Exception 
	 */
	@Test
	public void testDelete() throws Exception {
		Ciudad c=cd.buscar(2);
		cd.delete(c);
		c=cd.buscar(2);
		
		Assert.assertEquals(null, c);
	}
	/**
	 * metodo que prueba el buscar de la clase ciudadDao
	 * @throws Exception 
	 */
	@Test
	public void testBuscar() throws Exception {
		Ciudad c=cd.buscar(1);		
		Assert.assertEquals("x", c.getNombre());
	}
	/**
	 * metodo que prueba el listar de la clase ciudadDao
	 * @throws Exception 
	 */
	@Test
	public void testListar() throws Exception {
		List<Ciudad> ciudades=cd.listar();
		Ciudad c=cd.buscar(1);
		Assert.assertEquals(true, ciudades.contains(c));
	}
	
	/**
	 * metodo que se ejecuta de ultimo para eliminar la ciudad creada en
	 * el primer metodo y asi no dehat rastros de la prueba
	 * @throws Exception 
	 */
	@AfterClass
	public static void ultimo() throws Exception {	
		Ciudad c=cd.buscar(1);
		cd.delete(c);
	}

}
